import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    user: JSON.parse(localStorage.getItem('user') || 'null'), // 当前登录用户状态
  },
  mutations: {
    // 修改容器数据
    setUser (state, payload) {
      try {
        localStorage.setItem('user', payload);
        state.user = JSON.parse(payload);
      } catch (error) {
        localStorage.removeItem('user');
        state.user = null;
      }
    }
  },
  actions: {
  },
  modules: {
  }
})

// token过期问题

// 在请求前拦截每个请求，判断token的有效时间是否已经过期，若已过期，则将请求挂起，先刷新token后再继续请求

// 优点：在请求前拦截，能节省流量，省流量
// 缺点：需要后端额外的提供一个token过期的时间字段；使用本地时间判断，若本地时间被篡改，特别是本地时间比服务器慢时，拦截会失败

// 不在请求前拦截，而是拦截返回后的数据，先发起请求，接口返回过期后，先刷新token，再进行一次重试

// 优点：不需要额外的token过期字段，不需要判断时间
// 缺点：会消耗多一次请求，耗流量